package essential.ch3;

/**
 * @Date 2021/10/23
 * @Created by Jonathan
 * 当使用运算符“+”连接字符串时，如果两个操作数都是编译时常量，
 * 则在编译时期就会计算出该字符串的值，而不会在运行的时候创建StringBuilder对象。
 */
public class StringConcat {
    public static void main(String[] args) {
        // 两个操作数类型
        String s1 = "Hello,";
        String s2 = "World!";
        /**
         * 当使用“+”对字符串进行连接时，会创建一个临时的StringBuilder对象，该对象调用append方法负责字符串的连接操作，
         * 然后再调用StringBuilder类的toString方法转换成String对象
         */
        System.out.println(s1 + s2);
        // 只有一个操作数类型
        int i = 3;
        int[] array = new int[i];
        Boy[] boy = new Boy[1];
        boy[0] = new Boy();
        String s3 = "-string";
        System.out.println(i + s3);
        System.out.println(array + s3);
        System.out.println(boy + s3);
        System.out.println(boy[0] + s3);
        System.out.println(s1 + s2 + s3);
    }
}

class Boy {
    @Override
    public String toString() {
        return "I am a boy!";
    }
}